package co.edu.uniquindio.ejb;

import java.util.List;

import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.Query;

import com.sun.xml.rpc.processor.modeler.j2ee.xml.string;

import co.edu.uniquindio.dao.CalificacionDao;
import co.edu.uniquindio.dao.CompradorDao;
import co.edu.uniquindio.dao.PaisDao;
import co.edu.uniquindio.dao.PersonaDao;
import co.edu.uniquindio.dao.VendedorDao;
import co.edu.uniquindio.ejbremotos.UsuariosEjbRemote;
import co.edu.uniquindio.logica.Comprador;
import co.edu.uniquindio.logica.Marca;
import co.edu.uniquindio.logica.Modelo;
import co.edu.uniquindio.logica.Persona;
import co.edu.uniquindio.logica.Vendedor;

/**
 * EJB implementation class for Ejb: UsuariosEjb
 * este EJB defne una vista (Representacion) a ser accedida por
 * el cliente para el manejo de un Usuario en la BD 
 * @author Andres Felipe Abril
 * @author Luis Enrique Robledo
 */
@Stateless
@LocalBean
public class UsuariosEjb implements UsuariosEjbRemote
{
	/**
	 * este atributo representa una calificacionDao 
	 */
	@EJB
	private CalificacionDao calificacionDao;
	/**
	 * este atributo representa un paisDao 
	 */
	@EJB
	private PaisDao paisDao;
	/**
	 * este metodo representa un compradorDao 
	 */
	@EJB
	CompradorDao compradorDao;
	/**
	 * este atributo representa un vendedorDao
	 */
	@EJB
	VendedorDao vendedorDao;
	/**
	 * este atributo representa un personaDao
	 */
	@EJB
	PersonaDao personaDao;
	/**
	 * Default constructor. 
	 */
	public UsuariosEjb() {
		// TODO Auto-generated constructor stub
	}

	/**
	 * este metodo permitira agregar un vendedor 
	 * @param vendedor
	 * @throws Exception
	 */
	public void agregarVendedor(Vendedor vendedor) throws Exception
	{
        Vendedor vendedor2= vendedorDao.findByKey(vendedor.getCedula());
		if(vendedor2== null)
		    vendedorDao.insert(vendedor);
		else 
			throw new Exception("El vendedor ya existe ");
	}

	/**
	 * este metodo permitira agregar un comprador
	 * @param comprador
	 * @throws Exception
	 */
	public void agregarComprador(Comprador comprador)throws Exception
	{
		Comprador comprador2= compradorDao.findByKey(comprador.getCedula());
		if(comprador2==null)
		{
			compradorDao.insert(comprador);    		
		}
		else
			throw new Exception("El comprador (postor) ya existe ");
	}
	/**
	 * Este metodo permite eliminar un vendedor 
	 * @param Cedula del vendedor
	 * @param contrasenia del vendedor
	 * @throws Exception
	 */
	public void eliminarV(String Cedula , String contrasenia)throws Exception
	{
		Vendedor  vendedor2= vendedorDao.findByKey(Cedula);
		if(vendedor2!=null)
		{
			if(vendedor2.getContrasenia().equals(contrasenia))
			{
				if(vendedor2.getAutomoviles().size()==0 &&vendedor2.getSubastas().size()==0)
				vendedorDao.remove(vendedor2);
				else
					vendedor2.setEstado(false);
			}
				
			else
				throw new Exception("contraseña incorrecta ");
		}
		else
			throw new Exception("el vendedor no existe por favor verifique los datos");
	}
	/**
	 * este metodo me permite eliminar un comprador
	 * @param cedula del comprador
	 * @param contrasenia del comprador
	 * @throws Exception
	 */
	public void eliminarC(String cedula , String contrasenia)throws Exception
	{
		Comprador comprador2= compradorDao.findByKey(cedula);
		if(comprador2!=null)
		{
			if(comprador2.getContrasenia().equals(contrasenia))
			{
				compradorDao.remove(comprador2);
			}
			else
				throw new Exception("contraseña incorrecta ");
		}
		else
			throw new Exception("el vendedor no existe por favor verifique los datos");
	}
	/**
	 * Este metodo permitira modificar un vendedor 
	 * @param modificado
	 */
    public void editarV(Vendedor modificado)
    {
    	vendedorDao.update(modificado);
    }
    /**
     * Este metodo permitira modoficar un comprador
     * @param modificado
     */
    public void editarC(Comprador modificado)
    {
    	compradorDao.update(modificado);
    }
    public List<Vendedor>obtenerVendedores()
    {
    	List<Vendedor>list=vendedorDao.getAll();
    	return list;
    }
    public List<Comprador>obtenerCompradores()
    {
    	List<Comprador>list=compradorDao.getAll();
    	return list;
    }
   public Persona obtenerP(String contrasenia,String username)
   {
	   Persona persona=personaDao.obtenerPorContrasenia(contrasenia,username);
	   if(persona!=null)
          return persona;
	   else
		  return null;
   }
}
